print(5 & 7)  # and
print(5 | 7)  # or
print(~5)  # 00000101取反11111010，后者是补码，转为原来的00000110，为6，所以是-6

"""
1、正数原码补码一样
2、负数补码 ----取反+1------》它的绝对值的原码
已知一个补码，求它是多少：第一个1及之前的不动，前面全部取反，得到这个数的绝对值
已知一个负数，求它的补码是多少：先写成绝对值的原码，然后按上面的方法
3、-1是11111111，右移即 /2，永远是-1
"""

# 正数左移末位添0，右移高位添0
# 负数左移末位添0，右移高位添1
# 左移都是 *2，右移都是 /2
print("~" * 50)
print(5 << 1)  # 10
print(5 >> 1)  # 2

print("~" * 50)
print(-6 << 1)  # -12
print(-6 >> 1)  # -3
print(-7 << 1)  # -14
print(-7 >> 1)  # -4

print("~" * 50)
print(-1 << 1)  # -2
print(-1 >> 1)  # -1
